/**
 * created Aug 20, 2008
 * 
 * @by Marc Woerlein (woerlein@informatik.uni-erlangen.de)
 *
 * Copyright 2008 Marc Woerlein
 * 
 * This file is part of parsemis.
 *
 * Licence: 
 *  LGPL: http://www.gnu.org/licenses/lgpl.html
 *   EPL: http://www.eclipse.org/org/documents/epl-v10.php
 *   See the LICENSE file in the project's top-level directory for details.
 */

/**
 * Contains general functionality to build the search lattice.
 * <p>
 * Because of its size, each node of a search lattice is build on demand. Therefore 
 * just the necessary parts are generated, hold in memory and traversed. Each 
 * {@link de.parsemis.algorithms.Algorithm} has to provide its initial set of 
 * {@link de.parsemis.miner.chain.SearchLatticeNode} objects as root-nodes for the 
 * search-lattice. The children of each node can be generated by the corresponding 
 * {@link de.parsemis.miner.chain.Extender}. An extender generate just the necessary 
 * (i.e. frequent) children, otherones will be ommited to prune the search lattice.<br/>
 * <img src="doc-files/SLN-Ext.png">
 * <p>
 * An {@link de.parsemis.miner.chain.Extender} is organized as a pipeline (see picture below). The 
 * {@link de.parsemis.miner.chain.SearchLatticeNode} to be extended (1) is given to a chain of 
 * {@link de.parsemis.miner.chain.MiningStep} objects (2). Each {@link de.parsemis.miner.chain.MiningStep} 
 * offer another test, if or how the current node needs to be extended or stored. A required step 
 * is the {@link de.parsemis.miner.chain.GenerationStep} (3), that generate all possible/allowed/necessary 
 * {@link de.parsemis.miner.chain.Extension}s of the current node. The generation is also be organized as
 * a two-way pipeline consisting of {@link de.parsemis.miner.chain.GenerationPartialStep} objects.
 * The first part of the pipeline (A) is executed for each {@link de.parsemis.miner.general.Embedding}
 * to determine extensions candidates. Afterwards, the second part (B) collects all requiered extensions
 * and give it to the mining chain (4). Those extensions can be applied to the parent node to 
 * generate each child (5).<br/>
 * <img src="doc-files/chain.png">
 * <p>
 * @author Marc Woerlein (woerlein@informatik.uni-erlangen.de)
 */
package de.parsemis.miner.chain;
